package com.py.credit.dao;

import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface RuleBindingDao {

    /**
     * 添加表规则
     *
     * @param rule_id
     * @param table_id
     * @param edition_id
     */
    void addTableRuleBinding(@Param(value = "rule_id") int rule_id, @Param(value = "table_id") int table_id,
                             @Param(value = "edition_id") int edition_id);

    /**
     * 添加字段规则
     *
     * @param rule_id
     * @param filed_id
     * @param edition_id
     */
    void addColmnBinding(@Param(value = "rule_id") int rule_id, @Param(value = "filed_code") String filed_code,
                         @Param(value = "edition_id") int edition_id, @Param(value = "extend") String extend);

    /**
     * 解除表规则绑定
     *
     * @param rule_id
     * @param table_id
     * @param edition_id
     */
    void updateTableBinding(@Param(value = "id") Long id, @Param(value = "rule_id") int rule_id,
                            @Param(value = "table_id") int table_id, @Param(value = "edition_id") int edition_id,
                            @Param(value = "extend") String extend, @Param(value = "isDel") String isDel);

    /**
     * 更新字段绑定规则，id不存在插入，否则更新
     *
     * @param rule_id
     * @param filed_id
     * @param edition_id
     */
    void updateColmnBinding(@Param(value = "id") Long id, @Param(value = "rule_id") int rule_id,
                            @Param(value = "filed_code") String filed_code, @Param(value = "edition_id") int edition_id,
                            @Param(value = "extend") String extend, @Param(value = "isDel") String isDel);

    /**
     * 切换到新版本时，复制重复表的表规则
     *
     * @param rule_id
     * @param table_id
     * @param old_edition_id
     * @param new_edition_id
     */
    void copyTableBingding(@Param(value = "rule_id") int rule_id, @Param(value = "table_id") int table_id,
                           @Param(value = "old_edition_id") int old_edition_id, @Param(value = "new_edition_id") int new_edition_id);

    /**
     * 切换到新版本时，复制重复字段规则
     *
     * @param rule_id
     * @param filed_id
     * @param old_edition_id
     * @param new_edition_id
     */
    void copyColmnBingding(@Param(value = "rule_id") int rule_id, @Param(value = "filed_code") String filed_code,
                           @Param(value = "old_edition_id") int old_edition_id, @Param(value = "new_edition_id") int new_edition_id,
                           @Param(value = "extend") String extend);

    /**
     * 判定是否存在绑定的表规则
     *
     * @param ruleId
     * @return
     */
    int selectTbaRelationTotal(@Param(value = "ids") List<String> ids);

    /**
     * 判定是否存在绑定的字段规则
     *
     * @param ruleId
     * @return
     */
    int selectColRelationTotal(@Param(value = "ids") List<String> ids);

    List<Integer> selectTableBinding(@Param(value = "table_id") int table_id,
                                     @Param(value = "edition_id") int edition_id);

    /**
     * 功能描述: 查询字段绑定的规则
     *
     * @param filed_code 字段id
     * @param edition_id 版本id
     * @return
     * @author YaoS
     * @date 19/4/4 14:56
     */
    List<Map<String, Object>> selectColmnBinding(@Param(value = "filed_code") String filed_code,
                                                 @Param(value = "edition_id") int edition_id);

    /**
     * @return
     * @Function 获取当前启用版本
     * @FileName RuleBindingDao.java
     * @MethodName selectCurrentContentVersion
     * @Date 2018年7月26日 下午4:14:17
     * @Author Min DongXv
     */
    Integer selectCurrentContentVersion();

    void addTableRuleBind(@Param(value = "ruleId") int ruleId, @Param(value = "extend") String extend,
                          @Param(value = "tableId") String tableId, @Param(value = "version") Integer version);

    void addColumnRuleBind(@Param(value = "ruleId") int ruleId, @Param(value = "extend") String extend,
                           @Param(value = "fieldId") int fieldId, @Param(value = "fieldCode") String fieldCode,
                           @Param(value = "tableId") String tableId, @Param(value = "version") Integer version);

    void deleteBindColumnRule(@Param(value = "ruleId") int ruleId, @Param(value = "tableId") Integer tableId,
                              @Param(value = "fieldId") int fieldId, @Param(value = "version") Integer version);

    void deleteBindTableRule(@Param(value = "ruleId") int ruleId, @Param(value = "tableId") int tableId,
                             @Param(value = "version") Integer version);

    /**
     * 功能描述: 将旧版本的数据代入
     *
     * @param list      数据
     * @param versionId 版本号
     * @author YaoS
     * @date 19/4/4 15:17
     */
    void updateVersionBindTableData(@Param(value = "list") List<HashMap<String, Object>> list,
                                    @Param(value = "versionId") String versionId);

    /**
     * 功能描述: 将旧版本的数据代入
     *
     * @param list      数据
     * @param versionId 版本号
     * @author YaoS
     * @date 19/4/4 15:17
     */
    void updateVersionBindColumnData(@Param(value = "list") List<HashMap<String, Object>> list,
                                     @Param(value = "versionId") String versionId);

    /**
     * 功能描述: 查询版本下所有的未删除的规则绑定
     *
     * @param versionId 版本id
     * @return 查询的结果
     * @author YaoS
     * @date 19/4/4 15:08
     */
    List<HashMap<String, Object>> selectVersionBindTableData(int versionId);

    /**
     * 功能描述: 查询版本下所有的未删除的规则绑定
     *
     * @param versionId 旧版本id
     * @param newId 新版本id
     * @return 查询的结果
     * @author YaoS
     * @date 19/4/4 15:08
     */
    List<HashMap<String, Object>> selectVersionBindColumnData(@Param(value = "versionId") int versionId,
                                                              @Param(value = "newId") String newId);
}
